[INV-BACKEND-032] Создать метод DeductInventoryFIFO(DeductRequest)
Реализация низкоуровневого алгоритма каскадного FIFO-вычета
NoteКраткая карточка задачи
- Репозиторий / Компонент:
fridge-service(Домен INVENTORY). - Контракт метода: Внутренний gRPC-метод
DeductInventoryFIFO(DeductRequest). - Ссылка на Метод: Спецификация публикации фактов создания готовых блюд
- Статус: Готово к реализации
- Инструкция по шагам:
- На Шаге 2: Принять от смежных оркестраторов готовки (
cook-service) идентификатор продукта и требуемый к списанию вес. Открыть SQL-транзакцию. - Выполнить запрос к
PostgreSQL Fridge DBдля получения списка всех открытых упаковок/партий данного товара пользователя, принудительно отсортировав их по времени зачисления:ORDER BY created_at ASC. - На Шаге 4: Запустить цикл каскадного вычитания (FIFO Strategy). Если вес первой (самой старой) партии полностью покрывает расход — уменьшить её значение через
UPDATEи прервать цикл. Если не покрывает — полностью обнулить/удалить текущую строку (DELETE) и перенести остаток дефицита на следующую по дате партию. - В случае успешного завершения зафиксировать транзакцию, асинхронно отправить в Kafka-топик
bpds.pma.out.process.eventпакет сevent_type: "FIFO_SPENT"и вернуть gRPC-ответ.
- На Шаге 2: Принять от смежных оркестраторов готовки (